package utils
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	
	import modele.*;
		
	/***************************************************************
	**Classe chargée de parser le fichier XML.
	***************************************************************/
	public class Parseur extends Sprite{
		
		// objet de chargement
		private var chargementXML:URLLoader = new URLLoader();
		//variable objet
		private var localObjet:Objet;
		//tableau qui stock toutes les jointures
		private var jointures:Array = new Array();
		//element
		private var elementTemp:Element;
		//jointure
		private var jointureTemp:Jointure;
		
		//constructeur
		public function Parseur(fichierNom:String) {
			// url du fichier chargé
			var fichier:URLRequest = new URLRequest(fichierNom);
			chargementXML.addEventListener(Event.COMPLETE, chargementComplet);
			chargementXML.load(fichier);
			// chargement termin� du fichier xml
		}
		
		//Methode qui retourne les objets dans un tableau
		public function getObjet():Array{
			var tabObjets:Array = new Array();
			tabObjets.push(this.localObjet);
			return tabObjets;
		}
		// methode est appelé au chargerment complet du fichier XML
		public function chargementComplet(pEvt:Event):Array {   
			var racineXML:XML = new XML(pEvt.target.data); 

			localObjet = new Objet(racineXML.meta.nom.text());
			/**********************************
			 les balises element
			***********************************/
			var i:Number;
			for (i=0; i < racineXML.composition.element.length(); i++) {
				element = new Element(racineXML.composition.element[i].@idm, 
										racineXML.composition.element[i].texture.text(),
										racineXML.composition.element[i].couleur.text(),
										racineXML.composition.element[i].largeur.text(),
										racineXML.composition.element[i].hauteur.text(),
										racineXML.composition.element[i].profondeur.text() 
										);
				//on parcourt les liaisons de chaque element
				for(var j:Number =0; j< racineXML.composition.element[i].liaison.length(); j++){
					//on stock les liaions  
					// var temp qui sert de transfert
					jointureTemp = new Jointure(racineXML.composition.element[i].liaison[j].text());
					//on ajoute la nouvelle jointure dans le tableau  
					jointures.push(jointureTemp);
					//puis on l'ajoute a l'élément 
					elementTemp.addJointure(jointureTemp);
				}
				//ajout de chaque element a l'objet
				localObjet.addElement(elementTemp);
			}
			
			/**********************************
			 les balises connexion
			***********************************/
			var k:Number;
			// on parcourt les balises connexion
			for (k=0; k < racineXML.assemblage.connexion.length(); k++) {
				//on parcourt les balises liaisons
				for(var kk:Number; kk < racineXML.assemblage.connexion[k].liaison.length(); kk++){
					//contient les points recuperes du fichier XML
					var point1:String = racineXML.assemblage.connexion[k].liaison[kk].point1.text();
					var point2:String = racineXML.assemblage.connexion[k].liaison[kk].point2.text();
					
					// références vers les jointures
					var jointure1:Jointure;
					var jointure2:Jointure;
					//on parcout le tableau de jointures 
					for(var kkk:Number; kkk <jointures.length; kkk++) {
						if(jointures[kkk].getIdJointure() == point1) {
							jointure1= jointures[kkk];
						}
						if(jointures[kkk].getIdJointure() == point2) {
							jointure2 = jointures[kkk];
						}
						if( ( jointure1 != null) && ( jointure2 != null) ) break;
					}	
					//liaison des jointures
					jointure1.connecteA(jointure2);
					jointure2.connecteA(jointure1);
				}
			}
		}
	}
}